<?php

// Отправляем заголовки
header('Cache-control: no-cache');
header('Content-type: text/html; charset=utf-8');

// Выставляем флаги PHP
error_reporting (E_ALL);
ini_set ('display_errors', 1);
mb_internal_encoding('UTF-8');

// Включаем буферезированный вывод
ob_start(); 
ob_implicit_flush(0); 

// Начинаем замер производительности
$start_time = microtime(true); 

// Добавляем основной конфигурационный файл сайта
require $_SERVER['DOCUMENT_ROOT'].'/modules/system/config/system.php';

// Загружаем парамметры подключения к БД
require $_SERVER['DOCUMENT_ROOT'].'/modules/system/config/database.php';
define ('DB_PEREFIX', $DB['prefix']);

// Добавляем библиотеку функций ядра
require $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/core_functions.php';
// Перенаправляем ошибки в наш хэндлер
set_error_handler('myErrorHandler');


// Загружаем помощников
load_helper('url');
load_helper('cache');
load_helper('lang');

// Подключаемся к БД
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/connect.php';


// Загружаем 
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/functions.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/templates.class.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/templates.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/core.class.php';


// Загружаем плагины
/*$plugins = $db->query("SELECT p_file FROM ".DB_PEREFIX."_plugins WHERE p_status = 'on'");
while (list($plugin_file) = $db->fetch_row ($plugins))
{
	if (file_exists($plugin_file)) 
		require_once $_SERVER['DOCUMENT_ROOT'].'/'.$plugin_file;
}
*/

$theme = $SITE['site_theme'];

// Make template class
$template = new template ($_SERVER['DOCUMENT_ROOT'].'/modules/');
if (is_admin()) 
	$template->user = 'admin';
elseif (is_moderator()) 
	$template->user = 'moderator';
elseif (is_registered()) 
	$template->user = 'register';
else 
	$template->user = 'user';

// Перенаправляем в роутер
list($RUN['module'], $RUN['controller'], $RUN['params'], $MODULE) = router();

// Если аякс запрос
if ($RUN['params'][0] == 'ajax')
{

	// Устанавливаем ссылку на текущий ajax контроллер
	$AJAX =& $MODULE['ajax'][$RUN['params'][1]];

	// Загружаем ajax контроллер
	load_module_ajax($RUN['module'], $RUN['params'][1], $AJAX);	
	
}

// Устанавливаем ссылку на текущий контроллер
$CONTROL =& $MODULE['controllers'][$RUN['controller']];

// initialisation core
$CORE = new CORE ($db, $template, $SITE, 'mainpage.tpl', $GLOBAL_USER['user_group']);

// Устанавливаем парамметры
$PAGE_TITLE = $MODULE['module_header'];
$CORE->module_name = $mod_name;

// Стандартная сессия
$ugroup = 'guest';
$uid = '0';
$unical_sesid = $_SESSION['unical_sesid'];

if (is_registered()) 
{
	$ugroup = 'user';
	$uid = $GLOBAL_USER['user_id'];
}


// Устанавливаем парамметры сессии
$CORE->session ($ugroup, $uid, $unical_sesid, $PAGE_TITLE);

// Запускаем на выполнение действие контроллера
load_module_controller($RUN['module'], $RUN['controller'], $CONTROL);


$output = ob_get_contents();
ob_end_clean();

$CORE->title = $PAGE_TITLE;
$CORE->body = $output;
$CORE->make_page ();


// stop timer, past it to end of page
$end_time = microtime(true); 
$time = $end_time - $start_time; 

echo '
	<!-- Страница сгенерирована за '.$time.' секунд(ы) -->
	<!-- MySQL запрсов: '.$db->count_query.' -->
	<!-- Время выполнения запросов MySQL: '.$db->past_work_time().' секунд(ы) -->
	<!-- Обработка шаблонов '.$template->past_work_time().' секунд(ы) -->
	<!-- Использовано '.$template->count_.' шаблонов -->';

mysql_close();
exit; 


function router()
{
	// Получаем URI
	$uri_string = get_uri();
	// Проверяем не передан ли GET запрос

	
	// Получаем строку запроса и делим её на сегменты
	foreach(explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $uri_string)) as $val)
	{
		// Filter segments for security
		$val = trim(filter_uri($val));
		
		if ($val != '')
			$segment[] = $val;
	}
	
	// Если запроса нет то загружаем стандартный модуль
	if ( !isset($segment[0]) )
	{
		global $SITE;
		return array($SITE['default_module'], $SITE['default_controller'], array(), load_module_config($SITE['default_module']));
	}

	// Если установлен указатель на модуль 
	// то проверяем его на существование
	$MODULE = load_module_config($segment[0]);
	
	
	// Проверяем следующим аргументом идет контроллер или парамметр
	if ( !isset($MODULE['controllers'][$segment[1]]) )
	{
		// Устанавливаем стандартный контроллер и обрабатываем присланные данные
		return array($MODULE['module_name'], $MODULE['default_controller'], array_splice($segment,1,count($segment)), $MODULE);
	}
	
	// Следовательно пара модуль контроллер задана верно
	// возвращаем данные
	return array($MODULE['module_name'], $segment[1], array_splice($segment,2,count($segment)), $MODULE);
	
}




?>
